package youcheng.work.view_zhexian.view;

import android.graphics.Color;


import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.ValueFormatter;


import java.util.ArrayList;
import java.util.List;

import youcheng.work.view_zhexian.Bean;
import youcheng.work.view_zhexian.utils.StringUtil;

public class LineChartManager {


    private LineChart chart;
    private YAxis leftYAxis;   //左边Y轴
    private YAxis rightYaxis;  //右边Y轴
    private XAxis xAxis;      //X轴

    private double num_max = 100;

    public LineChartManager(LineChart mLineChart) {
        this.chart = mLineChart;
        leftYAxis = chart.getAxisLeft();
        rightYaxis = chart.getAxisRight();
        xAxis = chart.getXAxis();
    }

    //表格设置
    private void initChart(boolean legendShow) {
        //是否展示网格线
        chart.setDrawGridBackground(false);
        //是否显示边界
        chart.setDrawBorders(false);
        //是否可以拖动
        chart.setDragEnabled(false);
        //是否有触摸事件
        chart.setTouchEnabled(false);
        //两指放大缩小
        chart.setPinchZoom(false);
        //x轴动画
        chart.animateX(200);
        //无数据时展示
        chart.setNoDataText("暂无数据");
        //背景色
        chart.setBackgroundColor(Color.parseColor("#ffffff"));
        //底部padding
        chart.setExtraBottomOffset(10f);
        //顶部padding
        chart.setExtraTopOffset(20f);

        //表格右下角的小标签隐藏
        Description description = new Description();
        description.setEnabled(false);
        chart.setDescription(description);

        xAxis = chart.getXAxis(); //x轴
        leftYAxis = chart.getAxisLeft(); //y轴
        rightYaxis = chart.getAxisRight();

        xAxis.setTextSize(12);
        xAxis.setTextColor(Color.parseColor("#333333"));
        xAxis.setDrawGridLines(false); //是否显示网格
        xAxis.setAxisLineWidth(1.0f);  // 设置线的宽度
        xAxis.setAxisLineColor(Color.parseColor("#f2f2f2"));
        xAxis.setDrawAxisLine(false); //纵向网格
        xAxis.setAvoidFirstLastClipping(true);//设置最后和第一个标签不超出x轴
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置在底部
        xAxis.setAxisMinimum(-0.2f);
        xAxis.setGranularity(1f);
//        xAxis.setLabelCount(6, false);//设置X轴分割数量

        //保证Y轴从0开始，不然会上移一点
      //  leftYAxis.setAxisLineColor(Color.parseColor("#00ffffff"));// 坐标轴颜色，设置为透明
        leftYAxis.setAxisLineColor(Color.parseColor("#00ffffff"));// 坐标轴颜色，设置为透明

        leftYAxis.setTextColor(Color.parseColor("#333333")); //坐标轴数值
        leftYAxis.setTextSize(12);
        leftYAxis.setGridColor(Color.parseColor("#f2f2f2"));    // 横着的 网格线颜色，默认GRAY
        leftYAxis.setGridLineWidth(1);
        leftYAxis.setAxisMinimum(0f);
        leftYAxis.setDrawGridLines(true);//坐标线 左侧坐标线
        leftYAxis.setLabelCount(10); //设置y轴分割数量

        leftYAxis.setAxisMaximum((float) num_max);
        leftYAxis.setDrawAxisLine(false);//左边线

        //去除右侧Y轴
        rightYaxis.setEnabled(false);
        rightYaxis.setAxisMinimum(0f);
        rightYaxis.setDrawGridLines(false); //网格线
        rightYaxis.setDrawAxisLine(false); //右边线

        /***折线图例 标签 设置***/
        Legend legend = chart.getLegend(); //图例

        // 设置显示类型，LINE CIRCLE SQUARE EMPTY 等等 多种方式，查看LegendForm
        legend.setEnabled(legendShow);// 是否绘制图例
        legend.setForm(Legend.LegendForm.LINE); //左下角表格名称前面的小标志
        legend.setTextSize(11f);
//        legend.setTextColor(Color.parseColor("#00ffffff")); //左下角表格名称
//        legend.setYEntrySpace(20);  // 设置垂直图例间间距，默认0
        //显示位置 左下方
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);
        //是否绘制在图表里面
        legend.setDrawInside(false);
    }

    /**
     * 曲线初始化设置 一个LineDataSet 代表一条曲线
     *
     * @param lineDataSet 线条
     * @param color       线条颜色
     * @param mode
     */
    private void initLineDataSet(LineDataSet lineDataSet, int color, LineDataSet.Mode mode) {
        lineDataSet.setColor(color);
        lineDataSet.setCircleColor(color);
        lineDataSet.setLineWidth(2f);
        lineDataSet.setCircleRadius(4f);
        //设置曲线值的圆点是实心还是空心
        lineDataSet.setDrawCircleHole(true); //true  空心
        lineDataSet.setValueTextSize(10f);
        //设置折线图填充
        lineDataSet.setDrawFilled(false); //折线下方颜色
        lineDataSet.setFillColor(color);
        lineDataSet.setFillAlpha(25);
        lineDataSet.setFormLineWidth(1f);
        lineDataSet.setFormSize(15.f);

        //显示点
        lineDataSet.setDrawCircles(true);
        lineDataSet.setCircleRadius(5f);
        lineDataSet.setCircleColor(Color.parseColor("#ffffff")); //圆点底色
        lineDataSet.setCircleHoleRadius(3f); //空心大小
        lineDataSet.setCircleHoleColor(color); //空心颜色

        //显示内容
        lineDataSet.setDrawValues(true);

        //自定义显示的点的内容
        lineDataSet.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                return (int) value + "";
//                return getValue(value);
            }
        });

        LineData data = new LineData(lineDataSet);
        data.setValueTextColor(color); //数据颜色
        data.setValueTextSize(10f);
        if (mode == null) {
            //设置曲线展示为圆滑曲线（如果不设置则默认折线）
            lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        } else {
            lineDataSet.setMode(mode);
        }
    }


    /**
     * 展示曲线
     *
     * @param dataList 数据集合
     * @param name     曲线名称
     * @param color    曲线颜色
     */
    public void showLineChart(List<Bean> dataList, boolean legendShow, String name, int color) {

        for (int i = 0; i < dataList.size(); i++) {

            double num1 = 0;
            if (!StringUtil.isEmpty(dataList.get(i).value0)) {
                num1 = Double.parseDouble(dataList.get(i).value0);
            }
            if (num_max < num1) {
                num_max = num1;
            }
/*
            if (!StringUtil.isEmpty(dataList.get(i).value1)) {
                num2 = Double.parseDouble(dataList.get(i).value1);
            }

            if (!StringUtil.isEmpty(dataList.get(i).value2)) {
                num3 = Double.parseDouble(dataList.get(i).value2);
            }



            if (num_max < num2) {
                num_max = num2;
            }

            if (num_max < num3) {
                num_max = num3;
            }
         */

        }

//        num_max = Math.ceil(num_max / 10000) * 10000;

        initChart(legendShow);

        //自定义x轴显示元素
        xAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                int position = (int) value;
                if (position >= 0 && position < dataList.size()) {
//                    return dataList.get(position).data;
//                    return dataList.get(position).data.substring(dataList.get(position).data.length()-8);
                    return String.valueOf((position+1));
                } else {
                    return "0";
                }
            }
        });
//        //自定义y轴显示元素 ，
        leftYAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                if (Math.round(value) == num_max || Math.ceil(value) == num_max || (int) value == num_max || (int) value == 0) {
                    return value + "";
//                    return getValue(value);
                } else {
                    return "";
                }
            }
        });

        List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            Bean data = dataList.get(i);
            float f = 0;
            if (!StringUtil.isEmpty(data.value0)) {
                f = Float.parseFloat(data.value0);
            }
            Entry entry = new Entry(i, f);
            entries.add(entry);
        }
        // 每一个LineDataSet代表一条线
        LineDataSet lineDataSet = new LineDataSet(entries, name);
        //设置线的属性
        initLineDataSet(lineDataSet, color, LineDataSet.Mode.HORIZONTAL_BEZIER);
        //设置数据
        LineData lineData = new LineData(lineDataSet);
        chart.setData(lineData);

    }


    /*
     * 展示曲线
     *
     * @param dataList   数据集合
     * @param legendShow 是否展示左下角的小标志
     * @param name1      曲线1名称
     * @param name1      曲线2名称
     * @param color1     曲线1颜色
     * @param color2     曲线2颜色
     */
    public void showLineChartTwoLines(List<Bean> dataList, boolean legendShow, String name1,int color1) {

        showLineChart(dataList, legendShow, name1, color1);


    }
    /*
    public void showLineChartTwoLines(List<Bean> dataList, boolean legendShow, String name1, String name2,String name3,
                                      int color1, int color2, int color3) {

        showLineChart(dataList, legendShow, name1, color1);

        addLine2(dataList, name2, color2);

        addLine3(dataList, name3, color3);
    }
*/

    /**
     * 添加曲线
     */
    /*
    private void addLine2(List<Bean> dataList, String name, int color) {
        List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            Bean data = dataList.get(i);
            float f = 0;
            if (!StringUtil.isEmpty(data.value1)) {
                f = Float.parseFloat(data.value1);
            }
            Entry entry = new Entry(i, f);
            entries.add(entry);
        }
        // 每一个LineDataSet代表一条线
        LineDataSet lineDataSet = new LineDataSet(entries, name);
        initLineDataSet(lineDataSet, color, LineDataSet.Mode.HORIZONTAL_BEZIER);
        chart.getLineData().addDataSet(lineDataSet);
        chart.invalidate();
    }

    private void addLine3(List<Bean> dataList, String name, int color) {
        List<Entry> entries = new ArrayList<>();
        for (int i = 0; i < dataList.size(); i++) {
            Bean data = dataList.get(i);
            float f = 0;
            if (!StringUtil.isEmpty(data.value2)) {
                f = Float.parseFloat(data.value2);
            }
            Entry entry = new Entry(i, f);
            entries.add(entry);
        }
        // 每一个LineDataSet代表一条线
        LineDataSet lineDataSet = new LineDataSet(entries, name);
        initLineDataSet(lineDataSet, color, LineDataSet.Mode.HORIZONTAL_BEZIER);
        chart.getLineData().addDataSet(lineDataSet);
        chart.invalidate();
    }
*/

}
